#include "Acceptor.h"

Acceptor::Acceptor(unsigned short port, string ip)
    : _addr(port, ip), _sock()
{
}
void Acceptor::ready()
{
    setReuseAddr(true);
    setReusePort(true);
    bind();
    listen();
}

int Acceptor::accept()
{
    int netfd = ::accept(_sock.fd(), NULL, NULL);
    if (netfd < 0)
    {
        perror("accept");
    }
    return netfd;
}
void Acceptor::setReuseAddr(bool on)
{
    int value = on;
    int ret = setsockopt(_sock.fd(),
                         SOL_SOCKET,
                         SO_REUSEADDR,
                         &value,
                         sizeof(value));
    if(ret<0){
        perror("setsockopt");
    }
}
void Acceptor::setReusePort(bool on)
{
    int value = on;
    int ret = setsockopt(_sock.fd(),
                         SOL_SOCKET,
                         SO_REUSEPORT,
                         &value,
                         sizeof(value));
    if(ret < 0){
        perror("setsockopt");
    }
}
void Acceptor::bind(){
    int ret = ::bind(_sock.fd(),(struct sockaddr*)_addr.getInetaddressPtr(),sizeof(_addr));
    if(ret < 0){
        perror("bind");
    }
}
void Acceptor::listen(){
    int ret = ::listen(_sock.fd(),10000);
    if(ret < 0){
        perror("listen");
    }
}
